package com.homework.ch06;
class Animal {
    public static void staticSpeak() {
        System.out.println("Animal静态方法：动物叫");
    }

    public void instanceSpeak() {
        System.out.println("Animal实例方法：动物叫");
    }
}

class Dog extends Animal {
    // 这叫做"隐藏"(hiding)，不是"重写"(overriding)
    public static void staticSpeak() {
        System.out.println("Dog静态方法：汪汪汪");
    }

    // 这才是真正的"重写"
    @Override
    public void instanceSpeak() {
        System.out.println("Dog实例方法：汪汪汪");
    }
}

public class TestHiding {
    public static void main(String[] args) {
        Animal myDog = new Dog(); // 父类引用指向子类对象

        System.out.println("=== 静态方法（编译时绑定）===");
        myDog.staticSpeak();  // 输出：Animal静态方法：动物叫
        Animal.staticSpeak(); // 输出：Animal静态方法：动物叫
        Dog.staticSpeak();    // 输出：Dog静态方法：汪汪汪

        System.out.println("\n=== 实例方法（运行时多态）===");
        myDog.instanceSpeak(); // 输出：Dog实例方法：汪汪汪（真正的多态！）
    }
}
